273069f6e3086c5fccdd2a219a3caef51c3e66d9,src/main/java/com/jsoniter/IterImplNumber.java,IterImplNumber,readUnsignedLong,#JsonIterator#,332

Before Change


        long result = 0;
        for (; ; ) {
            result = result * 10 + v;
            c = IterImpl.readByte(iter);
            v = digits[c];
            if (v == -1) {
                iter.unreadByte();

After Change


        }
        long value = ind;
        for (; ; ) {
            for (int i = iter.head; i < iter.tail; i++) {
                ind = intDigits[iter.buf[i]];
                if (ind == INVALID_CHAR_FOR_NUMBER) {
                    iter.head = i;
                    return value;
                }
                value = (value << 3) + (value << 1) + ind;
                if (value < 0) {
                    // overflow
                    if (value == Long.MIN_VALUE) {
                        // if there is more number following, subsequent read will fail anyway
                        iter.head = i;
                        return value;
                    } else {
                        throw iter.reportError("readPositiveLong", "value is too large for long");
                    }
                }
            }
            if (!IterImpl.loadMore(iter)) {
                return value;
            }
        }
    }